GtkTextView: fix margin/padding scroll behaviour
authorSebastien Lafargue <slafargue@gnome.org>
Wed, 19 Aug 2015 10:33:06 +0000 (12:33 +0200)
committerSebastien Lafargue <slafargue@gnome.org>
Wed, 19 Aug 2015 20:51:39 +0000 (22:51 +0200)
When you move line by line, only padding is
automaticly shown and you need to use Page key to show margin.

This commit also fix cursor going out of the screen bug.

gtk/gtktextview.c

index 3e593144e387a2eba689c02275fbc008ae62b142..1ad4c067289d9de7d3d44e9a4e2f18e74d976396 100644 (file)
@@ -2278,7 +2278,7 @@ _gtk_text_view_scroll_to_iter (GtkTextView   *text_view,
   screen_inner_left = screen.x + within_margin_xoffset;
   screen_inner_top = screen.y + within_margin_yoffset;
   screen_inner_right = screen.x + screen.width - within_margin_xoffset;
-  screen_inner_bottom = screen.y + screen.width - within_margin_yoffset;
+  screen_inner_bottom = screen.y + screen.height - within_margin_yoffset;
 
   buffer_bottom = priv->height - priv->bottom_border;
   buffer_right = priv->width - priv->right_margin;
@@ -2325,14 +2325,14 @@ _gtk_text_view_scroll_to_iter (GtkTextView   *text_view,
           if (cursor.y == 0)
             border_yoffset = (with_border) ? priv->top_padding : 0;
 
-          screen_dest.y = cursor.y - MAX (within_margin_yoffset, border_yoffset);
+          screen_dest.y = cursor.y + priv->top_border - MAX (within_margin_yoffset, border_yoffset);
         }
       else if (cursor_bottom > screen_inner_bottom)
         {
-          if (cursor_bottom == buffer_bottom)
+          if (cursor_bottom == buffer_bottom - priv->top_border)
             border_yoffset = (with_border) ? priv->bottom_padding : 0;
 
-          screen_dest.y = cursor_bottom - screen_dest.height +
+          screen_dest.y = cursor_bottom - screen_dest.height + priv->top_border +
                           MAX (within_margin_yoffset, border_yoffset);
         }
     }